﻿using LiteDB;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace FileManagerSystem.Models
{
    /// <summary>
    /// 合并的完整文件信息
    /// <para>ReflectFileInf映射 + FileInf原始</para>
    /// </summary>
    public class CompleteFileResult
    {
        /// <summary>
        /// 唯一主键
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// 映射到主表的GUID（可由此，配合DirPath，查找到真实文件）
        /// </summary>
        public Guid PId { get; set; }

        /// <summary>
        /// 文件名
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 文件名后缀
        /// </summary>
        public string Extension { get; set; }


        /// <summary>
        /// 虚拟顶级目录GUID（可以为空）
        /// </summary>
        public string AbstractTopDirGuid { get; set; }

        /// <summary>
        /// 文件准备存到服务器上的虚拟目录
        /// <para>以后多文件打包下载时候会根据这个虚拟目录，并基于虚拟顶级目录重建文件夹</para>
        /// <para>（可以为空，为空表示没有上级目录）</para>
        /// <para>（可以是中文，例如“stl模型”“xxx病人重建数据”等）</para>
        /// <para>（可以是多重路径，例如“20211111\STL”“重建模型\STL\20211111\”等）</para>
        /// </summary>
        public string AbstractDirPath { get; set; }

        /// <summary>
        /// 上传时间 会在初次insert时插入，不用刻意给值
        /// </summary>
        public DateTime UploadTime { get; set; }

        /// <summary>
        /// 是否永久保存
        /// <para>默认不保存，如果未确认上传的文件，在服务器上属于垃圾文件，应该定期清除</para>
        /// </summary>
        public bool Keep { get; set; }


        #region 原始文件信息
        /// <summary>
        /// 文件mime类型
        /// </summary>
        public string MimeType { get; set; }

        /// <summary>
        /// 文件存放在服务器的真实目录，最后分片合并的时候才会更新
        /// </summary>
        public string DirPath { get; set; }

        /// <summary>
        /// 所传文件首个分片文件的md5（如果文件小于分片大小）
        /// </summary>
        public string Md5 { get; set; }

        /// <summary>
        /// 文件大小
        /// </summary>
        public long FileSize { get; set; } 
        #endregion
    }

    /// <summary>
    /// 简略文件信息
    /// </summary>
    public class SimpleFileInfo {
        /// <summary>
        /// 唯一主键
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// 文件名
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 文件名后缀
        /// </summary>
        public string Extension { get; set; }

        /// <summary>
        /// 文件大小，转换成英文
        /// </summary>
        public string FileSize { get; set; }
    }
}
